#include <iostream>

int main()
{

    std::cout << "While" << std::endl;
    // 局部变量声明
    int a = 10;

    // while 循环执行
    while (a < 20)
    {
        std::cout << "a 的值：" << a << std::endl;
        a++;
    }

    // for 循环执行
    for (int a = 10; a < 20; a = a + 1)
    {
        std::cout << "a 的值：" << a << std::endl;
    }

    std::cout << "基于范围的for循环(C++11)" << std::endl;
    int my_array[5] = {1, 2, 3, 4, 5};

    // 每个数组元素乘于 2
    for (int &x : my_array)
    {
        x *= 2;
        std::cout << x << std::endl;
    }

    // auto 类型也是 C++11 新标准中的，用来自动获取变量的类型
    for (auto &x : my_array)
    {
        x *= 2;
        std::cout << x << std::endl;
    }

    std::cout << "Do While" << std::endl;
    // 局部变量声明
    a = 10;

    // do 循环执行
    do
    {
        std::cout << "a 的值：" << a << std::endl;
        a = a + 1;
    } while (a < 20);

    std::cout << "嵌套循环" << std::endl;
    int i, j;
    for (i = 2; i < 100; i++)
    {
        for (j = 2; j <= (i / j); j++)
        {
            if (!(i % j))
            {
                break; // 如果找到，则不是质数
            }
        }
        if (j > (i / j))
        {
            std::cout << i << " 是质数" << std::endl;
        }
    }

    std::cout << "Goto" << std::endl;

    // 局部变量声明
    a = 10;

    // do 循环执行
LOOP:
    do
    {
        if (a == 15)
        {
            // 跳过迭代
            a = a + 1;
            goto STOP;
        }
        std::cout << "a 的值：" << a << std::endl;
        a = a + 1;
    } while (a < 20);

STOP:
    std::cout << "我出来了" << std::endl;

    std::cout << "无限循环" << std::endl;
    //无限循环
    for (;;)
    {
        printf("This loop will run forever.\n");

        break;
    }

    return 0;
}
